Introducción al lenguaje R aplicado a sistemas y servicios de salud
Unidad 1: Instalación e introducción al lenguaje R
Unidad 2: Procesamiento de datos
Unidad 3: Exploración, diagnóstico y limpieza de datos
Unidad 4: Tratamiento de datos específicos
Unidad 5: Estadísticos, operaciones múltiples y resúmenes
Unidad 6: Visualización de datos
Unidad 7: Control de flujo y funciones
Unidad 8: Comunicar con Quarto
Esquema de trabajo
Los jueves comenzamos un nuevo tema en el aula virtual con material teórico-práctico, recursos extras, enlaces, bibliografía complementaria y el encuentro sincrónico de la unidad de 10 a 12 hs.
Los viernes tendremos los encuentros sincrónicos prácticos de 9 a 11 hs.
Las unidades coinciden con las semanas y tendran una práctica para desarrollar. Al finalizar las unidades tendrán que resolver un trabajo práctico integrador.
Importante
El sincrónico del jueves 1 de mayo, al ser feriado, será grabado previamente y subido al aula virtual.
Trabajos prácticos
Cada unidad tiene su trabajo práctico.
Es importante que lo intenten hacer y utilicen el foro para consultar las dudas y problemas.
Al finalizar cada unidad se subirá una resolución al aula virtual.
El trabajo practico integrador se inicia con la unidad 8 y se entrega el 6/6/2025.
Nota
Estas fechas pueden sufrir cambios como resultado del desarrollo de la cursada.
“R es un entorno de software libre para gráficos y computación estadística.
Se compila y se ejecuta en una amplia variedad de plataformas UNIX, Windows y MacOS.”
Profundizando en su descripción podemos decir, más técnicamente, que:
es un lenguaje de programación interpretado, orientado a objetos, multiplataforma y open source pensado para el manejo de datos estadísticos.
Por lo tanto …
…es un lenguaje de programación estadístico
Básicamente es un lenguaje de programación, con sus estructuras y reglas de sintaxis, que posee una gran variedad de funciones desarrolladas para estadística y otras librerías con diversas aplicaciones.
…es un lenguaje Orientado a Objetos
Implementa los conceptos de la programación orientada a objetos y esto le otorga simpleza y flexibilidad en el manejo de datos.
…es un lenguaje interpretado
No es necesario compilar el código para construir ejecutables sino que directamente se ejecuta por medio del intérprete que el software instala.
…es multiplataforma
Se puede instalar en diferentes sistemas operativos como Linux, Windows y Mac.
…es Open Source y se distribuye bajo licencia GNU - GPL
Se distribuye gratuitamente bajo licencia GNU (General Public License) – GPL y que los usuarios tienen la libertad de usar, estudiar, compartir (copiar) y modificar el software.
Historia
R es un lenguaje que fue desarrollado a partir del lenguaje S que a su vez tiene sus orígenes en Bell Labs de la AT&T (actualmente Lucent Technologies) de mediados de la década del ’70. Posteriormente, S fue vendido y dio origen a una versión propietaria denominada S-Plus que es comercializada por Insighful Corporation.
En 1995 dos profesores de estadística de la Universidad de Auckland, en Nueva Zelanda (Ross Ihaka y Robert Gentleman, iniciaron el “Proyecto R”, con la intención de desarrollar un programa estadístico inspirado en el lenguaje S pero de dominio público.
Funcionamiento
Usuarios del lenguaje y enfoque “comunicativo”
Plantea abordar el lenguaje R como un lenguaje para “comunicarse” (similar a un segundo lenguaje como el inglés, francés, etc.)
Al dotar a R de una estructura particular semántica, gramatical y sintáctica.
Se busca comenzar a “decir cosas con datos” y luego profundizar en las estructuras del lenguaje.
Diferencias entre ser “usuario” y “programador”
Propuesto por Riva Quiroga de LatinR en el encuentro global de RStudio de 2021. Para profundizar ver ponencia “How to do things with words: Learning to program with a ‘communicative approach’” en rstudio::global(2021)
R es un lenguaje de funciones (y argumentos)
Una función es un bloque de código que sólo se ejecuta cuando se llama.
Existen funciones que forman parte de la base del lenguaje y otras que estan empaquetadas en librerías.
Todas las funciones devuelven algo. Datos, un resultado o una acción determinada.
La mayoría necesitan de ciertos datos que se declaran dentro de la función denominados argumentos. Algunos son obligatorios y otros opcionales.
Toda función se escribe con una sintaxis precisa y finaliza siempre con paréntesis. Los argumentos se separan por comas.
Paquetes de R
Paquete es sinónimo de librería y contiene una serie de funciones y/o datos con su documentación.
El conjunto base de R tiene varias funciones fundamentales contenidas en algunos paquetes (base, stats, utils, graphics, methods, etc)
Los paquetes se instalan, activan y desactivan. El sitio oficial donde se publican se encuentra en CRAN - packages
Visto como un lenguaje (idioma) los paquetes vendrían a ser conjuntos de palabras que “agregamos” a nuestro vocabulario para poder “comunicarnos” mejor o más fácilmente con el interprete de R.
IDE - Entorno de Desarrollo Integrado
Paneles
Proyectos
Scripts
Herramientas de edición
Gestión de paquetes
Tidyverse
Una colección de paquetes de R modernos, que comparten una gramática y filosofía común, diseñados para resolver los desafíos de la ciencia de datos.
Fundamentos
Estructura ordenada de datos (tidy)
Cada variable es una columna de la tabla de datos
Cada observación es una fila de la tabla de datos
Cada tabla responde a una unidad observacional
Principios básicos
Reutilizar las estructuras de datos mediante el uso de tuberías
Resolver problemas complejos combinando varias piezas sencillas
Diseño para humanos incorporando una gramática específica al lenguaje (que ya posee una sintaxis estricta y una semantica que le otorga significado)
Tuberías
Las tuberías son operadores que permiten “canalizar” un objeto hacia una función o llamar a una expresión, lo que le permite expresar una secuencia de operaciones que transforman un objeto.
Existen dos tuberías conocidas:
%>% perteneciente al paquete magrittr del tidyverse
|> que es la propuesta nativa de R base a partir de la versión 4.1.0
La mayoría de los scripts del curso muestran la tubería nativa, pero se puede utilizar cualquiera de las dos.
Tuberías
Para el uso general, la utilización de las dos tuberías es la misma, es decir que la forma simple de las tuberías inserta el lado izquierdo como primer argumento en la llamada del lado derecho.
Esto posibilita la reutilización de las estructuras de datos y la escritura de porciones de código similares a “oraciones” de un párrafo.
Pulse aquí para ver algunas caracteristicas comparativas de estas tuberías.
Estructura de datos
Las estructuras de datos son los objetoscontenedores de datos que el lenguaje ofrece.
Existe una variedad de estructuras de datos: vectores, matrices, arrays, dataframes, listas, etc.
Vamos a describir a las más relevantes dentro del ecosistema tidyverse y que serviran en estos inicios del curso: Los vectores y los dataframes.
Vectores
Son secuencias de elementos del mismo tipo de datos.
Tienen dos atributos principales: longitud y tipo de datos.
Los vectores integer y double se conocen como vectores numéricos (numeric).
Dataframes
Un dataframe, que se traduce como marco de datos, es similar a una tabla de datos construida por una colección de vectores ubicados verticalmente que mantienen la integridad de sus filas.
Tienen dos dimensiones, las columnas verticales llamadas variables y las filas horizontales llamadas observaciones.
Las columnas pueden ser de diferentes tipos, pero todas las filas de cada columna pueden tener un mismo tipo de dato.
La combinación de datos de las diferentes columnas que conforman una fila es fija, por lo que se asegura la integridad de estas observaciones (principio de las bases de datos).
Tibbles
Los tibbles son una versión moderna del dataframe que introduce tidyverse.
Tienen las mismas características que un dataframe normal con algunos atributos más agradables.
Cuando importemos tablas de datos, estos se almacenarán como dataframes/tibbles.
Dado que estamos centrados en tidyverse, utilizaremos los términos dataframe y tibble como sinónimos entre sí para su uso general.
Los dataframes/tibbles son el tipo de datos fundamental en la mayoría de los análisis que llevaremos adelante.
Archivos de datos
El formato de archivos de datos estándar y universal es el texto plano separado por comas (archivos csv)
Se pueden importar otros formatos comunes como .xlsx, o específicos provenientes de Stata, SPSS, y otros softwares de análisis a partir de paquetes que integran el tidyverse.
Estas tablas de datos tienen las variables ubicadas en las columnas y las observaciones en las filas.
El objeto al que asignemos la importación de estos archivos siempre será un dataframe/tibble.
Otro formato de datos propio de R es .RData, que permite guardar varios objetos del lenguaje (vectores, dataframes, etc.) simultáneamente. Es como almacenar el entorno de trabajo completo.
Errores y advertencias
Ayuda
Todas las funciones del R base o de los paquetes vienen acompañadas con su respectiva documentación.
Esta documentación se puede visualizar en el panel Help de RStudio navegando como si fuese un navegador web.
La documentación tiene una estructura que se repite: descripción, uso, argumentos, detalles, valores, ejemplos.
También se pueden hacer busquedas en buscadores web como Google, foros especializados, como por ejemplo Stack Overflow o Rpubs, canales de slack y más recientemente en IAs como chatGPT o Google Gemini.
Importar y exportar archivos de datos
En el mundo informático existen numerosos formatos de archivos de tablas / base de datos.
El lenguaje R permite importar y exportar de una amplia variedad de formatos a partir de utilizar diferentes paquetes. Muchos de ellos pertenecientes al ecosistema tidyverse.
Hoy nos vamos a centrar en dos formatos básicos habituales donde tenemos almacenada comúnmente la información:
Archivos texto plano separados por comas u otro caracter (extensiones .csv, .txt, etc)
Archivos con formato Excel (.xls y .xlsx)
Además mencionaremos otros formatos posibles y el propio de R
Paquete readr
El paquete readr se instala y activa cuando ejecutamos library(tidyverse).
Contiene una familia de funciones que permiten leer y escribir archivos de texto plano separados como coma o algún otro caracter (tabulación, punto y coma, etc)
Sus funciones de lectura comienzan todas con read_
Sus funciones de escritura comienzan con write_
Lectura con funciones de readr
La primera función de lectura que vamos a presentar es read_delim()
El estructura de esta función sirve de base para las demás.
Sus principales argumentos son:
file: nombre del archivo
delim: caracter separador de columna
col_names: Valor lógico. Si es TRUE lee la primera fila como nombres de las variables. Si es FALSE no lo hace.
skip: número de líneas que saltea para comenzar a leer.
Lectura con funciones de readr
La función tiene numerosos argumentos que nos permite controlar eficazmente la lectura, como vemos debajo, pero se suelen modificar pocos de ellos en la mayoría de las situaciones.
Para archivos separados por comas en formato regional Estadounidense se utiliza la función read_csv().
Tiene la misma base de read_delim() pero asume:
que el caracter delimitador es la coma “,”
que el caracter separador de coma decimal es el punto “.”
read_csv(file ="datos.csv")
Lectura con funciones de readr
Para archivos separados por comas en formato regional Español/Argentino se utiliza la función read_csv2().
Tiene la misma base de read_delim() pero asume:
que el caracter delimitador es el punto y coma “;”
que el caracter separador de coma decimal es la coma “,”
read_csv2(file ="datos.csv")
Lectura de múltiples archivos
En ocasiones trabajamos con múltiples archivos que tienen una misma estructura interna, por ejemplo provenientes de proyectos longitudinales de vigilancia epidemiológica. Supongamos que tenemos el caso de vigilancia de una enfermedad donde se produce un archivo por mes, tipo 01_SUH.csv, 02_SUH.csv, 03_SUH.csv, etc hasta el mes 12.
Podemos almacenar los nombre de los archivos en un vector y luego leerlos todos juntos, incorporando la identificación del archivo.
archivos_SUH <-c("datos/01-SUH.csv", "datos/02-SUH.csv", "datos/03-SUH.csv")read_csv(archivos_SUH, id ="archivo")#> archivo mes anio ID edad #> <chr> <chr> <dbl> <dbl> <dbl>#> 1 datos/01-SUH.csv Enero 2019 1234 3#> 2 datos/01-SUH.csv Enero 2019 8721 9#> 3 datos/01-SUH.csv Enero 2019 1822 2
Herramienta de lectura de RStudio
Paquete readxl
El paquete readxl se instala con tidyverse pero hay que activarlo aparte mediante library(readxl).
Contiene funciones que permiten leer archivos de Microsoft Excel tan extendidos en nuestro trabajo cotidiano.
La función comodín para leer, tanto formatos .xls como .xlsx, es read_excel()
Lectura con funciones de readxl
La estructura de los argumentos de la función read_excel() es:
path: nombre del archivo
sheet: hoja del libro del archivo Excel
range: rango de celdas (opcional)
col_names: Valor lógico. Si es TRUE lee la primera fila como nombres de las variables. Si es FALSE no lo hace.
skip: número de líneas que saltea para comenzar a leer.
Paquete haven
Este paquete permite la importación de archivos provenientes de paquetes estadísticos como SPSS (.sav), Stata (.dta) y SAS (.sas7bdat) y también su exporatción.
Sus funciones principales son read_spss(), read_por(), read_stata(), read_dta(), read_sas()
Las funciones de exportación comienzan con el prefijo write_
Utiliza la librería ReadStat hecha en lenguaje C por Evan Miller.
Tiene algunas limitaciones dependiendo de las versiones de los softwares.
Formato nativo R
El propio lenguaje R tiene un formato nativo de almacenamiento del entorno de trabajo produciendo archivos con extención .RData.
Las funciones, pertenecientes a R base, para guardar y leer los .RData son:
save(): almacena el contenido del entorno de trabajo, pudiendo seleccionar cual o cuales objetos deseamos guardar.
load(): lee archivos .RData y su contenido (sea este uno o varios objetos)
Cabe aclarar que cuando nos referimos a objetos estamos hablando de cualquier estructura de datos como dataframes, vectores, matrices, etc y también funciones propias.